package TarryDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import TarryDTOS.ClientesDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author MauricioAlanGonzalez
 */
public class ClientesDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public ClientesDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ DEVUELVE EN VECTOR TODOS LOS CLIENTES
     *
     * @return
     */
    public Vector todosClientes() {
        Vector vClientes = new Vector();

        db.openDatabase();
        String query = "SELECT * FROM clientes ;";
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                ClientesDTO cliente = new ClientesDTO();
                cliente = res.clientesDTO(rst);
                vClientes.add(cliente);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return vClientes;
    }

    /**
     * ALAN GONZALEZ METODO QUE DEVUELVE TODOS LOS CLIENTES QUE EMPIEZAN CON UN
     * INICIO DETERMINADO EN EL CAMPO NOMBRE DEL CLIENTE
     *
     * @param indicio
     * @return
     */
    public Vector todosClientesNombre(String indicio) {
        Vector vClientes = new Vector();
        db.openDatabase();
        String query = "SELECT * FROM clientes where clientes.nombre_cliente LIKE '%" + indicio + "%';";
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                ClientesDTO cliente = new ClientesDTO();
                cliente = res.clientesDTO(rst);
                vClientes.add(cliente);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("NUMERO DE DATOS FILTRADOS" + vClientes.size());
        db.closeDatabase();
        return vClientes;
    }

    /**
     * ALAN GONZALEZ METODO QUE DEVUELVE UN CLIENTE POR SU ID
     *
     * @param idCliente
     * @return
     */
    public ClientesDTO clientesDTO(int idCliente) {
        ClientesDTO cliente = new ClientesDTO();
        String query = "SELECT * FROM clientes where clientes.id = " + idCliente;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                cliente = res.clientesDTO(rst);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return cliente;
    }

    /**
     * ALAN GONZALEZ METODO CREAR UN NUEVO CLIENTE
     *
     * @param cliente
     */
    public void nuevoCliente(ClientesDTO c) {
        db.openDatabase();
        String sql = "INSERT INTO clientes SET";
        sql += " clientes.id =0";
        sql += ", clientes.rfc ='" + c.getRfc()+"'";
        sql += ", clientes.nombre_cliente ='" + c.getNombreCliente()+"'";
        sql += ", clientes.telefono ='" + c.getTelefono()+"'";
        sql += ", clientes.domicilio ='" + c.getDomicilio()+"'";
        sql += ", clientes.desc_uno ='" + c.getDescuentoAsignadoUno()+"'";
        sql += ", clientes.desc_dos ='" + c.getDescuentoAsignadoDos()+"'";
        sql += ", clientes.desc_tres ='" + c.getDescuentoAsignadoTres()+"'";
        sql += ", clientes.colonia ='" + c.getColonia()+"'";
        sql += ", clientes.codigo_postal ='" + c.getCodigoPostal()+"'";
        sql += ", clientes.estado ='" + c.getEstado()+"'";
        sql += ", clientes.ciudad ='" + c.getCiudad()+"'";
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ | METODO PARA EDITAR UN CLIENTE
     *
     * @param c
     */
    public void editaCliente(ClientesDTO c) {
        db.openDatabase();
        String sql = "UPDATE  clientes SET";
        sql += " clientes.rfc ='" + c.getRfc()+"'";
        sql += ", clientes.nombre_cliente ='" + c.getNombreCliente()+"'";
        sql += ", clientes.telefono ='" + c.getTelefono()+"'";
        sql += ", clientes.domicilio ='" + c.getDomicilio()+"'";
        sql += ", clientes.desc_uno ='" + c.getDescuentoAsignadoUno()+"'";
        sql += ", clientes.desc_dos ='" + c.getDescuentoAsignadoDos()+"'";
        sql += ", clientes.desc_tres ='" + c.getDescuentoAsignadoTres()+"'";
        sql += ", clientes.colonia ='" + c.getColonia()+"'";
        sql += ", clientes.codigo_postal ='" + c.getCodigoPostal()+"'";
        sql += ", clientes.estado ='" + c.getEstado()+"'";
        sql += ", clientes.ciudad ='" + c.getCiudad()+"'";
        sql += " WHERE  clientes.id ='" + c.getId()+"'";
        db.execute(sql);
        db.closeDatabase();
    }
    
    
    /**
     * ALAN GONZALEZ DEVUELVE LA RAZON SOCIAL DEL CLIENTE SEGUN SU ID 
     * @param idCliente
     * @return 
     */
    public String razonSocialPorID(int idCliente){
    String razonSocial = new String();
    String sql = "SELECT clientes.nombre_cliente as nombre FROM clientes WHERE clientes.id= "+idCliente;
    db.openDatabase();
    ResultSet rst = db.executeQuery(sql);
        try {
            if(rst.next()){
            razonSocial = rst.getString("nombre");
            }else{
            razonSocial = null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    db.closeDatabase();
    return razonSocial;
    }

}
